package com.atguigu.boot.controller;

import com.atguigu.boot.aes.AesException;
import com.atguigu.boot.aes.WXBizJsonMsgCrypt;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping()
@Slf4j
public class WxController {

    @GetMapping
    public String test(@RequestParam("msg_signature") String msg_signature,
                     @RequestParam("timestamp") String timestamp,
                     @RequestParam("nonce") String nonce,
                     @RequestParam("echostr") String echostr
                     ) throws AesException {
        String sToken = "qXriQ1kC1";
        String sCorpID = "ww45490cf7333392da";
        String sEncodingAESKey = "Zflor1szpcmU4RHx3CllhcaYvqTeWQ9ferHAb4jvKUT";
        WXBizJsonMsgCrypt wxcpt = new WXBizJsonMsgCrypt(sToken, sEncodingAESKey, sCorpID);
        log.info("sToken===={}",sToken);
        log.info("sCorpID===={}",sCorpID);
        log.info("sEncodingAESKey===={}",sEncodingAESKey);


        log.info("msg_signature===={}",msg_signature);
        log.info("timestamp===={}",timestamp);
        log.info("nonce===={}",nonce);
        log.info("echostr===={}",echostr);
        /*
		------------使用示例一：验证回调URL---------------
		*企业开启回调模式时，企业微信会向验证url发送一个get请求
		假设点击验证时，企业收到类似请求：
		* GET /cgi-bin/wxpush?msg_signature=5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3&timestamp=1409659589&nonce=263014780&echostr=P9nAzCzyDtyTWESHep1vC5X9xho%2FqYX3Zpb4yKa9SKld1DsH3Iyt3tP3zNdtp%2B4RPcs8TgAE7OaBO%2BFZXvnaqQ%3D%3D
		* HTTP/1.1 Host: qy.weixin.qq.com

		接收到该请求时，企业应		1.解析出Get请求的参数，包括消息体签名(msg_signature)，时间戳(timestamp)，随机数字串(nonce)以及企业微信推送过来的随机加密字符串(echostr),
		这一步注意作URL解码。
		2.验证消息体签名的正确性
		3. 解密出echostr原文，将原文当作Get请求的response，返回给企业微信
		第2，3步可以用企业微信提供的库函数VerifyURL来实现。

		*/
        // 解析出url上的参数值如下：
        // String sVerifyMsgSig = HttpUtils.ParseUrl("msg_signature");
        String sVerifyMsgSig = msg_signature;
        // String sVerifyTimeStamp = HttpUtils.ParseUrl("timestamp");
        String sVerifyTimeStamp = timestamp;
        // String sVerifyNonce = HttpUtils.ParseUrl("nonce");
        String sVerifyNonce = nonce;
        // String sVerifyEchoStr = HttpUtils.ParseUrl("echostr");
        String sVerifyEchoStr =echostr;
        String sEchoStr; //需要返回的明文
        try {
            sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp,
                    sVerifyNonce, sVerifyEchoStr);
//            System.out.println("verifyurl echostr: " + sEchoStr);
            log.info("verifyurl echostr===={}",sEchoStr);
            return sEchoStr;
            // 验证URL成功，将sEchoStr返回
            // HttpUtils.SetResponse(sEchoStr);
        } catch (Exception e) {
            //验证URL失败，错误原因请查看异常
            e.printStackTrace();
            log.error("error_info===={}",e.getMessage());
        }
        return null;
    }
    @GetMapping("code")
    public String code(@RequestParam("code") String code){
        return  code;
    }
}
